<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
            构造函数：
                和普通函数的创建方式差不多，但有一些区别：
                构造函数习惯上，首字母大写
                普通函数直接调用，而构造函数需要使用new关键字来调用
         */

        function Person() {
            console.log(this); // this指向新创建的Person对象

        }
        var p = Person(); // 普通函数调用，无法返回值
        console.log(p);

        var p1 = new Person(); // 构造函数调用，立即创建对象，并将对象作为返回值
        console.log(p1);

        console.log(p1 instanceof Person);

        function Dog(name, age) {
            this.name = name;
            this.age = age;
            // this.sayHi = function () {
            //     console.log("hi");
            // }
            this.sayHi = sayHi;
        }

        var d1 = new Dog("wawa", 2);
        var d2 = new Dog("wawa", 2);
        /* 
            每创建一个don对象，就会创建一个新的sayHi方法，这样不太好，可以让所有对象共享同一个方法，
            可以将sayHi方法放到全局
         */

        function sayHi() {}

        console.log(d1.sayHi == d2.sayHi); //true
    </script>
</body>

</html>